4

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

【什么是TCP/IP协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次? 】

标题:

【修真院java 小课堂】什么是TCP/IP协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

开场语:

大家好,我是IT修真院郑州分院第12期的学员张泉良,一枚正直纯洁善良的JAVA程序员,今天给大家分享一下,修真院官网JAVA任务二,深度思考中的知识点—— 什么是TCP/IP协议?TCP的三次握手指的是什么,为什么一定要三次握手,而不是四次或者是两次?

 

  1. 背景介绍:

 网络协议:

书本上的定义:网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合

网络协议就是人为规定的一套通信规范,只要双方都遵循这个规范,就能实现交流

 

TCP/IP具体含义:利用ip进行通信时所必须用到的协议群的统称。

具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。

 

  1. 知识剖析:

 

TCP/IP协议族是一个四层协议系统,自底而上是数据链路层、网络层、传输层和应用层。上层协议使用下层协议提供的辅助。

  (1) 数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介上的传输

  (2) 网络层实现数据包的选路和转发。网络层的任务就是选择中间节点(路由器),以确定两台主机之间的通信路径

  (3) 传输层为两台主机上的应用程序提供端到端的通信。传输层只关心通信的起始端和目的端,忽略数据包的中转过程

       传输层协议主要有三个:TCP协议、UDP协议和SCTP协议

 (4) 应用层负责处理应用程序的逻辑。

      数据链路层、网络层和传输层负责处理网络通信细节,这部分必须既稳定又高效,因此在内核空间中实现。

      而应用层则在用户空间,因为它负责处理众多逻辑,比如文件传输、名称查询等。

 

 

  1. 常见问题:

   (1)TCP/IP协议通信的过程?

     浏览器访问服务器服务流程:

             1、浏览器访问网址

              2、dns协议解析域名

             3、http协议---http数据,确定数据传输格式等

             4、TCP协议---加TCP首部----端口之间发送数据包----三次握手达成连接

             5、IP协议---加IP首部----通过IP地址确定网络地址

             6、以太网协议--加以太网首部----确定mac地址(主机网卡的唯一标识)

(2)如何建立TCP/IP连接?

      TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。

      所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。 

      基础信息:

                TCP报文格式

                (1)序列号:Sql序号,用来标识数据包,发起方发送数据时对此进行标记。

                (2)确认序号:Ack序号,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

                (3)标志位:共6个,即SYN、ACK、PSH、RST、URG、FIN

(3)为什么要三次握手?

        在《计算机网络》一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,

         因而产生错误”

         三次握手是在安全可靠的基础上,握手次数最少的方案。两次握手并不能保证可靠性。四次握手又浪费了效率

 

  1. 编码实战:
  2. 拓展思考:

(1) TCP建立连接为什么需要三次握手而结束要四次挥手?

          三次握手:client请求连接SYN---server确认收到,发送ACK和SYN---client确认收到

          四次挥手:client请求关闭FIN---(server确认收到,发送ACK---server继续发送数据直到完毕,发送FIN)

                            ----client确认收到

(2)TCP与UDP的区别

  (3) TCP的可靠传输原理

      停止等待协议

      连续ARQ协议

  1. 参考文献:

     (1)  https://www.jianshu.com/p/e7f...

    (2) https://blog.csdn.net/be_happ...

     (3) 计算机网络第6版

 

7.  更多讨论:

Q1:Sequence number序列号是什么?

A1:Sql序号,用来标识数据包,发起方发送数据时对此进行标记。数据包的序号,有操作系统根据一定的算法生成,相当于id的作用。

   

Q2:acknowledgement number和ACK区别?

A2:ACK:标识符,只有0和1,只要有数据包的传输,ACK就要set为1;

        acknowledgement number:ack序号,只有ACK标志位为1时,确认序号字段才有效,ack=Seq+1;

        在数据包传输过程中ack=seq+len;

Q3:TCP与UDP的区别

A3:TCP协议提供面向连接的,可靠的传输服务,但速度较慢,适合文件下载等传输任务;UDP协议提供无连接的,不可靠的传输服务,但速度较快,适合媒体流等看重传输速度的传输任务

 

8.  鸣谢:

9.  结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~


用户bPbdDlb
422 声望36 粉丝